Спринт 1/18 → Тема 10/13: Создание функций → Урок 1/1
Функции в Python
Вы уже применяли встроенные функции Python и писали собственные. Перед тем, как погрузиться в более серьёзное их изучение — стоит освежить в памяти всё, что о них уже известно.
Функции: краткое досье
Функция в программировании — это именованный фрагмент кода, предназначенный для многократного использования. Функцию можно вызывать (запускать её код) из любого места программы; вызывать функцию можно сколько угодно раз.
Функции бывают встроенные, они написаны разработчиками Python или авторами модулей. Встроенные функции хороши тем, что не обязательно выяснять, что происходит у них «под капотом», а можно просто взять и применить их: функция
str() превратит данные в строку, print() — выведет информацию в консоль, а type() — определит тип данных.Функцию можно написать самостоятельно: для этого нужно придумать ей информативное имя, объявить её и описать тело функции — код, который будет выполняться при вызове. Тело функции отбивается четырьмя отступами от начала строки, в которой объявлена эта функция.
PYTHON
Функции пишут так, чтобы они:
- обрабатывали входящие данные;
- возвращали значение, результат работы.
Входящие данные функция принимает в параметры — переменные, обрабатываемые в теле функции. Параметры указываются после имени функции в скобках, через запятую.
PYTHON
Значения, передаваемые в функцию при вызове, называют аргументами функции:
PYTHON
Переданные в функцию аргументы можно обрабатывать только в теле функции, получить доступ к параметрам функции извне нельзя.
Функция обрабатывает входящие данные и получает какой-то результат. Этот результат функция может вернуть — передать для дальнейшей обработки вне этой функции.
В теле функции возвращаемое значение указывается после ключевого слова
return.После выполнения инструкции
return функция завершит выполнение.Запустите программу. При вызове функции
never_print_result() строка 'Я не напечатаю ...' никогда не будет напечатана: выполнение функции будет прервано инструкцией return:КодPYTHON
Разбиение кода на функции
Программу работы с данными из онлайн-кинотеатра можно оптимизировать, разобрав её код на функции.
Сейчас рекомендации для просмотра печатаются таким кодом:
PYTHON
Недостатки этого подхода в том, что этот код находится в основном теле программы и может быть выполнен лишь единожды. Значит, чтобы обработать следующее значение рейтинга — нужно перезапустить программу или ещё раз написать этот блок кода.
Перенесём код в тело функции и вместо того, чтобы печатать результат, будем возвращать его из функции. Возвращаемый результат будет записан в переменную
result.Запустите код несколько раз, передавая в функцию разные аргументы.
КодPYTHON
Инструкция
return прерывает выполнение функции; за счёт этого код можно упростить и сделать более читаемым:PYTHON
Такой подход помогает избавиться от излишней вложенности условий и циклов. Применяйте его! Кто-то из великих сказал: «Плоское лучше вложенного» — и был прав!
Функция не обязательно должна возвращать какие-то значения: она может выполнить какую-то работу (например, вывести строку на печать) — и завершиться.
PYTHON
Значения параметров по умолчанию
Для вызова функции необходимы все аргументы. Если пропустить хотя бы один из них — будет выдано сообщение об ошибке.
PYTHON
Чтобы избежать такой ситуации — можно назначить значение параметра по умолчанию: это значение будет применено, если при вызове параметр не передан.
PYTHON
В этом случае второй аргумент при вызове функции становится необязательным (или опциональным).
Позиционные и именованные параметры
В функции
get_mod_diff() позиции аргументов и параметров просто сопоставлены по порядку: аргумент №1 соответствует параметру №1, аргумент №2 — параметру №2.При вызове функции можно передавать аргументы, указывая имена параметров. Порядок именованных аргументов при вызове не важен:
PYTHON
Оператор «звёздочка»
Оператор
* в Python означает не только умножение: он позволяет «распаковывать» итерируемые объекты, например — списки:PYTHON
Содержимое списка
x распаковано и помещено в список y.Аргументы *args и **kwargs
Есть случаи, когда неизвестно точное количество аргументов, которые будут переданы в функцию. В таких случаях при объявлении функции вместо списка аргументов применяют конструкцию
*args или **kwargs (или обе вместе).*args — это сокращение от arguments (англ. «аргументы»), а **kwargs — сокращение от keyword arguments (англ. «именованные аргументы»).Оператор «звёздочка» в этих конструкциях используется для распаковки аргументов: из них будет создана последовательность, которую можно обработать внутри функции.
PYTHON
В примере используется имя
*ratings, а не *args, и в этом нет ошибки. args — традиционное, но не обязательное имя для списка неименованных аргументов. Главный трюк в этой конструкции — применение оператора «звёздочка», а имя для последовательности можно задавать любое.В конструкции
**kwargs имя kwargs тоже не предустановлено, оно может быть любым. Оператор ** распаковывает именованные аргументы в словарь, и этот словарь можно обработать в теле функции:PYTHON
Пустая функция
При построении структуры проекта разработчики часто создают пустые функции, чтобы постепенно наполнять их кодом. Но если Python увидит функцию без тела — он выдаст ошибку. Чтобы избежать этого, в тело функции ставят «заглушку» — ключевое слово
pass.PYTHON
Таким же образом можно применять многоточие
Ellipsis:PYTHON
Пора применить полученные знания на практике, шпаргалка вам в помощь. Вперёд!
Функция
get_mean() получает на вход список чисел. Напишите код функции так, чтобы она возвращала среднее арифметическое чисел из полученного списка.
Вызовите функцию
get_mean() с аргументом num_lst; напечатайте результат вызова, округлив его до двух знаков после запятой.КодPYTHON
Функция принимает в качестве аргументов начальное и конечное значение диапазона и неопределённое количество чисел для проверки.
Напишите функцию, которая вернёт список чисел, попадающих в установленный диапазон.
Если значение находится вне диапазона функция должна печатать сообщение «Число за границами диапазона».
Допишите функцию
test_range() так, чтобы она:- принимала в качестве аргументов:
- начальное и конечное значение диапазона,
- неопределённое количество чисел для проверки;
- формировала список из чисел, которые попадают в установленный диапазон;
- для значений, которые находится вне пределов диапазона, печатала сообщение «Число за границами диапазона»;
- возвращала список чисел, попадающих в установленный диапазон.
КодPYTHON